package com.augus.admin.interceptor;

import lombok.extern.slf4j.Slf4j;
import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

/**
 * 登录检查
 * 1、配置好拦截器要拦截那些请求
 * 2、把这些配置放在容器中
 */
@Slf4j
public class LoginInterceptor implements HandlerInterceptor {


  /**
   * 目标方法执行之前
   *
   * @param request
   * @param response
   * @param handler
   * @return
   * @throws Exception
   */
  @Override
  public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {

    String requestURI = request.getRequestURI();

    log.info("拦截的请求路径是{}", requestURI);

    // 登录检查逻辑
    HttpSession session = request.getSession();

    Object loginUser = session.getAttribute("loginUser");
    if (loginUser != null) {
      // 放行
      return true;
    }
    // 拦截住,未登录,跳转到登录页
    request.setAttribute("msg", "请先登录");
    // response.sendRedirect("/"); // 取不到内容(没登录想进别的页面,有提示) 用转发
    request.getRequestDispatcher("/").forward(request, response);// 转发

    // 拦截
    return false;
  }

  /**
   * 目标方法执行以后
   *
   * @param request
   * @param response
   * @param handler
   * @param modelAndView
   * @throws Exception
   */
  @Override
  public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
    log.info("postHandle执行{}", modelAndView);
  }

  /**
   * 页面渲染以后
   *
   * @param request
   * @param response
   * @param handler
   * @param ex
   * @throws Exception
   */
  @Override
  public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
    log.info("afterCompletion执行的异常{}", ex);
  }
}
